package com.t114514.demo.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.t114514.demo.mapper.QuestionnaireMapper;
import com.t114514.demo.pojo.*;
import com.t114514.demo.service.QuestionnaireAnswerService;
import com.t114514.demo.service.QuestionnaireService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.ArrayList;
import java.util.List;

@Service
public class QuestionnaireServiceImpl implements QuestionnaireService {

    @Autowired
    private QuestionnaireMapper questionnaireMapper;

    @Autowired
    private QuestionnaireAnswerService questionnaireAnswerService;

    @Override
    public void create_empty(String questionnaireTitle) {
        questionnaireMapper.create_empty(questionnaireTitle);
    }

    @Override
    public PageBean<Questionnaire> getAllQuestionnaire(int pageNum, int pageSize) {
        PageBean<Questionnaire> pageBean = new PageBean<>();
        PageHelper.startPage(pageNum, pageSize);
        List<Questionnaire> questionnaireList = questionnaireMapper.getAllQuestionnaire();
        Page<Questionnaire> p = (Page<Questionnaire>) questionnaireList;
        pageBean.setTotal(p.getTotal());
        pageBean.setItems(p.getResult());
        return pageBean;
    }

    @Override
    public void addQuestion(@RequestBody Question question) {
        Integer questionNumber = questionnaireMapper.getQuestionNumber(question.getQuestionnaireId()) + 1;
        question.setQuestionNumber(questionNumber);
        questionnaireMapper.addQuestion(question);
    }

    @Override
    public void deleteQuestion(Integer questionId) {
        questionnaireMapper.deleteQuestion(questionId);
    }

    @Override
    public void updateQuestionNumber(Integer questionId) {
        Question question=questionnaireMapper.getQuestion(questionId);
        int questionNumber=question.getQuestionNumber();

        Question question = questionnaireMapper.getQuestion(questionId);
        int questionNumber = question.getQuestionNumber();
        questionnaireMapper.updateQuestionNumber(questionNumber);

    }

    @Override
    public void addOptions(Options option) {
        Integer optionNumber = questionnaireMapper.getOptionNumber(option.getQuestionId()) + 1;
        option.setOptionNumber(optionNumber);
        questionnaireMapper.addOption(option);
    }

    @Override
    public void updateOptionNumber(Integer optionId) {
        Options option = questionnaireMapper.getOption(optionId);
        int optionNumber = option.getOptionNumber();
        questionnaireMapper.updateOptionNumber(optionNumber);
    }

    @Override
    public void deleteOption(Integer optionId) {
        questionnaireMapper.deleteOption(optionId);
    }

    @Override
    public PageBean<Question> getQuestions(Integer questionnaireId, int pageNum, int pageSize) {
        PageBean<Question> pageBean = new PageBean<>();
        PageHelper.startPage(pageNum, pageSize);
        List<Question> questionList = questionnaireMapper.getAllQuestion(questionnaireId);
        Page<Question> p = (Page<Question>) questionList;
        pageBean.setTotal(p.getTotal());
        pageBean.setItems(p.getResult());
        return pageBean;
    }

    @Override
    public List getOptions(Integer questionId) {
        return questionnaireMapper.getAllOption(questionId);
    }

    @Override
    public List<Question> findQuestionsByQuestionnaireId(int questionnaireId) {
        return questionnaireMapper.getQuestionByquestionnaireId(questionnaireId);
    }

    @Override
    public List<Options> findOptionsByQuestionId(Integer questionId) {
        return questionnaireMapper.selectOptionsByQuestionId(questionId);
    }

    @Override
    public List<Question> findQuestionsByQuestionnaireId2(int questionnaireId) {
        return questionnaireMapper.selectQuestionByquestionnaireId(questionnaireId);
    }

    @Override
    public void deleteAllOption(Integer questionId) {
        questionnaireMapper.deleteAllOption(questionId);
    }

    @Override
    public void submitQuestionnaire(Questionnaire questionnaire) {
        questionnaireMapper.submitQuestionnaire(questionnaire);
    }

    @Override
    public List<Integer> checkQuestionnaire(Questionnaire questionnaire) {
        return questionnaireMapper.checkQuestionnaire(questionnaire);
    }

    @Override
    public List<TeacherAndStudent> getAllTeacherAndStudent() {
        return questionnaireMapper.getAllTeacherAndStudent();
    }

    @Override
    public void publishQuestionnaire(int questionnaireId, int studentId, int teacherId) {
        questionnaireMapper.publishQuestionnaire(questionnaireId,studentId,teacherId);
    }


    @Override
    public PageBean<AnswerContent<Answer>> AnswerContent(int questionnaireId,int teacherId, int pageNum, int pageSize) {
        // 初始化PageBean对象
        PageBean<AnswerContent<Answer>> pb = new PageBean<>();

        // 启动分页功能，指定当前页码和页面大小
        PageHelper.startPage(pageNum, pageSize);

        // 获取该问卷下所有问题的列表
        List<Question> questions = findQuestionsByQuestionnaireId2(questionnaireId);

        // 初始化一个列表来存储 AnswerContent 对象
        List<AnswerContent<Answer>> answerContents = new ArrayList<>();

        // 遍历每个问题，获取答案并封装到 AnswerContent 对象中
        for (Question question : questions) {
            // 获取该问题的所有答案
            List<Answer> answers = questionnaireAnswerService.findAnswersByQuestionId(question.getQuestionId(),teacherId);

            // 创建 AnswerContent 对象
            AnswerContent<Answer> answerContent = new AnswerContent<>(question.getQuestionNumber(), question.getQuestionContent(), answers);

            // 将 AnswerContent 对象添加到列表中
            answerContents.add(answerContent);
        }

        // 使用PageInfo来包装查询结果，这样就可以获取分页信息
        PageInfo<AnswerContent<Answer>> pageInfo = new PageInfo<>(answerContents);

        // 设置总记录数到PageBean对象
        pb.setTotal(pageInfo.getTotal());

        // 设置课程列表到PageBean对象
        pb.setItems(pageInfo.getList());

        // 返回填充了分页信息和课程列表的PageBean对象
        return pb;
    }

    @Override
    public PageBean<Questionnaire> getQuestionnaire(int teacherId,int pageNum, int pageSize) {
        PageBean<Questionnaire> pageBean = new PageBean<>();
        PageHelper.startPage(pageNum, pageSize);
        List<Questionnaire> questionnaireList = questionnaireMapper.getQuestionnaire(teacherId);
        Page<Questionnaire> p = (Page<Questionnaire>) questionnaireList;
        pageBean.setTotal(p.getTotal());
        pageBean.setItems(p.getResult());
        return pageBean;
    }


}
